// com/interview/case03/Fruit.java
package com.interview.case03;

import java.math.BigDecimal;

/**
 * 抽象类 Fruit，表示一种水果。
 */
public abstract class Fruit {
    private String name;
    private BigDecimal pricePerJin; // 单价（元/斤）
    private BigDecimal discount;     // 折扣（例如0.8表示8折）

    /**
     * 构造方法，允许设置名称、单价和折扣。
     *
     * @param name        水果名称
     * @param pricePerJin 单价（元/斤）
     * @param discount    折扣（默认为1.0，即无折扣）
     */
    public Fruit(String name, BigDecimal pricePerJin, BigDecimal discount) {
        if (pricePerJin.compareTo(BigDecimal.ZERO) < 0) {
            throw new IllegalArgumentException("单价不能为负数");
        }
        if (discount.compareTo(BigDecimal.ZERO) <= 0 || discount.compareTo(new BigDecimal("1.0")) > 0) {
            throw new IllegalArgumentException("折扣必须在0到1之间");
        }
        this.name = name;
        this.pricePerJin = pricePerJin;
        this.discount = discount;
    }

    /**
     * 构造方法，默认折扣为1.0（无折扣）。
     *
     * @param name        水果名称
     * @param pricePerJin 单价（元/斤）
     */
    public Fruit(String name, BigDecimal pricePerJin) {
        this(name, pricePerJin, new BigDecimal("1.0"));
    }

    public String getName() {
        return name;
    }

    public BigDecimal getPricePerJin() {
        return pricePerJin;
    }

    public BigDecimal getDiscount() {
        return discount;
    }

    /**
     * 计算该水果的总价，考虑折扣。
     *
     * @param quantity 购买的斤数
     * @return 总价（元）
     */
    public BigDecimal calculateTotalPrice(int quantity) {
        if (quantity < 0) {
            throw new IllegalArgumentException("购买的斤数不能为负数");
        }
        BigDecimal total = pricePerJin.multiply(new BigDecimal(quantity));
        total = total.multiply(discount);
        return total;
    }
}
